﻿
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- saved from url=(0014)about:internet -->
<html xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:mssdk="winsdk" xmlns:script="urn:script" xmlns:build="urn:build" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Description" content="Client Objects and the Engine"/>
<meta name="MSHAttr" content="PreferredSiteName:MSDN"/>
<meta name="MSHAttr" content="PreferredLib:/library/windows/hardware"/>
<title>Client Objects and the Engine</title>

<meta name="MS-HAID" content="EngExtCpp_DG_42d89746-845e-4b92-a7b0-362d1a7e57bb.xml"/>


<link rel="STYLESHEET" type="text/css" HREF="../common/backsdk4.css"/>





<style>
html,div { margin: 0; padding: 0;}

body {
	padding: 0px;
	margin: 0px;
	overflow: auto;
	height: 100%;
}

#winchm_template_button{
	float: right;
	width: 93px;
	top: 7px;
	position: relative;
	text-align: right;
	right: 5px;
	height: auto;
}

#winchm_template_top{
	padding: 0px;
	margin: 0px;
	border-bottom: 1px solid #9B9B9B;
	background-color: #B1CEFE;
}

#winchm_template_navigation{
	margin: 0px;
	padding-top: 7px;
	padding-left: 7px;
	padding-bottom: 3px;
	padding-right: 0px;
	font-size: 8.5pt;
	font-family: Arial, Helvetica, sans-serif;
	font-weight: normal;
	color: #585858;
}

#winchm_template_title{
	margin: 0px;
	padding-top: 4px;
	padding-left: 7px;
	padding-bottom: 7px;
	padding-right: 0px;
	font-size: 18px; 
	font-family: Verdana, Geneva, sans-serif;
	color: #363636;
}

#winchm_template_content{
	margin-top: 20px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	width: auto  !important;
	width: 100%;
}

#winchm_template_footer{
	border-width: 1px;
	border-color: #B1CEFE;
	border-top-style: solid;
	margin-top: 15px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	padding-top: 7px;
	padding-left: 0px;
	padding-bottom: 0px;
	padding-right: 0px;
	font-family: arial, helvetica, sans-serif;
	font-size: 8.5pt;
	color: #696969;
	width: auto;
	text-align: left;
}


#winchm_template_container{
	margin: 0px;
	padding: 0px;
	position: static;
	padding-bottom: 3px;
	overflow: auto;
	background-color: #FFFFFF;
}


@media print
{
#winchm_template_container{
	position: static;	
	margin: 0px;
	padding: 5px;
	
	width: auto;
	height: auto;
	overflow: auto;
}
#winchm_template_button{
visibility:hidden;
}
}

#winchm_template_navigation A:link	{text-decoration: none; color:#004080}
#winchm_template_navigation A:visited  {text-decoration: none; color: #004080}
#winchm_template_navigation A:active {text-decoration: none; color: #004080 }
#winchm_template_navigation A:hover {text-decoration: none;color: #0080FF}

A:link	{text-decoration: underline; color:#0033CC}
A:visited  {text-decoration: underline; color: #0033CC}
A:active {text-decoration: underline; color: #0033CC }
A:hover {text-decoration: underline;color: #FF0000;}
</style>
<script type="text/javascript">
function isMobile(){
Agent = window.navigator.userAgent;
if (Agent.indexOf("iPhone")>=1 || Agent.indexOf("iPad")>=1 || Agent.indexOf("iPod")>=1 || Agent.indexOf("Android")>=1){
return true;
}else{
return false;	
}

}
function d_onresize(){
if (window.navigator.userAgent.indexOf("MSIE")>=1){
document.getElementById('winchm_template_container').style.pixelWidth = document.body.offsetWidth - 3;
document.getElementById('winchm_template_container').style.pixelHeight = document.body.offsetHeight - document.getElementById('winchm_template_top').offsetHeight - 4;
}
document.getElementById('winchm_template_container').style.top = document.getElementById('winchm_template_top').offsetHeight + 'px';
}

function d_onbeforeprint(){
document.getElementById('winchm_template_container').style.width = 'auto';
document.getElementById('winchm_template_container').style.height = 'auto';
}

function d_onafterprint(){
d_onresize();
}

if(!isMobile()){

window.onload = d_onresize;
window.onresize = d_onresize;
window.onbeforeprint = d_onbeforeprint;
window.onafterprint = d_onafterprint;

document.write("<style>\n");
document.write("body {overflow: hidden;}\n");
document.write("#winchm_template_container {position: absolute;overflow: auto;top : 0px;right: 0px;bottom: 0px;left: 0px;}\n");
document.write("</style>\n");
}

</script>
</head>
<body><script language="JavaScript" type="text/JavaScript">
function syn(){
if(parent.nav.tree){
 if(parent.nav.tree.loaded){
  parent.nav.tree.selectNode(930);
 }else{
  setTimeout("syn()",500);
}
  }else{
  setTimeout("syn()",500);
  }}
if(parent!=self){
  setTimeout("syn()",100);
}else{
  parent.location.href = "../../index.htm?page=debugger/client_objects_and_the_engine.htm";
}
originalOnload = window.onload;
if(originalOnload==null){
window.onload = function(){parent.contentLoaded = true;};
}else{
window.onload = function(){originalOnload();parent.contentLoaded = true;};
}
</script> 


<div id="winchm_template_top">
	<div id="winchm_template_button"><A href="engextcpp_extension_libraries.htm" title="Previous topic"><img id="winchm_template_prev" alt="Previous topic" src="../template2/btn_prev_n.gif" border="0"></a><A href="writing_engextcpp_extensions.htm" title="Next topic"><img id="winchm_template_next" alt="Next topic" src="../template2/btn_next_n.gif" border="0"></a></div>
	<div id="winchm_template_navigation">Help &gt; 
<A href="introduction6.htm">Debugging Tools for Windows (WinDbg, KD, CDB, NTSD)</A> &gt; <A href="debugging_resources.htm">Debugging Resources</A> &gt; <A href="debugger_engine_and_extension_apis.htm">Debugger Engine and Extension APIs</A> &gt; <A href="engextcpp_extensions.htm">EngExtCpp Extensions</A> &gt; <A href="engextcpp_extension_design_guide.htm">EngExtCpp Extension Design Guide</A> &gt; </div>
	<div id="winchm_template_title">Client Objects and the Engine</div>
</div>
<div id="winchm_template_container">
	<div id="winchm_template_content"><div id="mainSection"><p>An EngExtCpp extension interacts with the <a href="#Bookmark192">debugger engine</a> through a client object.  Interface pointers to the client object are available to the extension through members of the <a href="#Bookmark940"><b>ExtExtension</b></a> base class.  The following members provide access to the first version of the engine API interfaces.</p>
<table>
<tr>
<th>Engine API interface</th>
<th>ExtExtension member</th>
</tr>
<tr>
<td>
<p><a href="#Bookmark243">IDebugAdvanced</a></p>
</td>
<td>
<p><b>m_Advanced</b></p>
</td>
</tr>
<tr>
<td>
<p><a href="#Bookmark290">IDebugClient</a></p>
</td>
<td>
<p><b>m_Client</b></p>
</td>
</tr>
<tr>
<td>
<p><a href="#Bookmark374">IDebugControl</a></p>
</td>
<td>
<p><b>m_Control</b></p>
</td>
</tr>
<tr>
<td>
<p><a href="#Bookmark551">IDebugDataSpaces</a></p>
</td>
<td>
<p><b>m_Data</b></p>
</td>
</tr>
<tr>
<td>
<p><a href="#Bookmark596">IDebugRegisters</a></p>
</td>
<td>
<p><b>m_Registers</b></p>
</td>
</tr>
<tr>
<td>
<p><a href="#Bookmark624">IDebugSymbols</a></p>
</td>
<td>
<p><b>m_Symbols</b></p>
</td>
</tr>
<tr>
<td>
<p><a href="#Bookmark740">IDebugSystemObjects</a></p>
</td>
<td>
<p><b>m_System</b></p>
</td>
</tr>
</table>
<p> </p>
<p>The following members provide access to later versions of the engine API interfaces.  These interfaces may not be available in all versions of the debugger engine.  If they are not available, any attempt to use them will result in a exception being thrown.</p>
<table>
<tr>
<th>Engine API interface</th>
<th>ExtExtension member</th>
</tr>
<tr>
<td>
<p><b>IDebugAdvanced2</b></p>
</td>
<td>
<p><b>m_Advanced2</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugAdvanced3</b></p>
</td>
<td>
<p><b>m_Advanced3</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugClient2</b></p>
</td>
<td>
<p><b>m_Client2</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugClient3</b></p>
</td>
<td>
<p><b>m_Client3</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugClient4</b></p>
</td>
<td>
<p><b>m_Client4</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugClient5</b></p>
</td>
<td>
<p><b>m_Client5</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugControl2</b></p>
</td>
<td>
<p><b>m_Control2</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugControl3</b></p>
</td>
<td>
<p><b>m_Control3</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugControl4</b></p>
</td>
<td>
<p><b>m_Control4</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugData2</b></p>
</td>
<td>
<p><b>m_Data2</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugData3</b></p>
</td>
<td>
<p><b>m_Data3</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugData4</b></p>
</td>
<td>
<p><b>m_Data4</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugRegisters2</b></p>
</td>
<td>
<p><b>m_Registers2</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugSymbols2</b></p>
</td>
<td>
<p><b>m_Symbols2</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugSymbols3</b></p>
</td>
<td>
<p><b>m_Symbols3</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugSystemObjects2</b></p>
</td>
<td>
<p><b>m_System2</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugSystemObjects3</b></p>
</td>
<td>
<p><b>m_System3</b></p>
</td>
</tr>
<tr>
<td>
<p><b>IDebugSystemObjects4</b></p>
</td>
<td>
<p><b>m_System4</b></p>
</td>
</tr>
</table>
<p> </p>
<p>The members in these tables are initialized each time the extension library is used to execute an extension command or format a structure for output.  Once a task is completed, these members are uninitialized.  Consequently, extensions should not cache the values of these members and should use the <b>ExtExtension</b> members directly.</p>
<p>An extension library can also create its own client objects using the method <a href="#Bookmark296"><b>IDebugClient::CreateClient</b></a> or the functions <a href="#Bookmark240"><b>DebugCreate</b></a> or <a href="#Bookmark238"><b>DebugConnect</b></a>.</p>
<p>For an overview of client objects, see <a href="#Bookmark195">Client Objects</a>.</p></div></div>	
	<div id="winchm_template_footer">Copyright &copy; 2019. All rights 
reserved. (To change the copyright info, just edit it in template.)</div>
</div>

</body>
</html>
